package com.njbw.design_pattern.struct.proxy.dynamicProxy.cglib;

import lombok.extern.slf4j.Slf4j;
import org.springframework.cglib.proxy.Enhancer;

/**
 *
 * @author 黄侯淳
 * @since JDK 1.8
 */
@Slf4j
public class Main {

    public static void main(String[] args) {
        // cglib 通过 Enhancer 类来创建动态代理
        Enhancer enhancer = new Enhancer();
        // 设置它的父类
        enhancer.setSuperclass(DatabaseDataQuery.class);
        // 设置一个方法拦截器，用来拦截方法
        enhancer.setCallback(new CacheMethodInterceptor());
        // 创建代理类
        DatabaseDataQuery dataQueryProxy = (DatabaseDataQuery) enhancer.create();
        // 5、事实上调用 query 方法的时候，实际上是调用的 invocationHandler 的 invoke 方法
        String result = dataQueryProxy.query("key1");
        log.info("result={}", result);
        log.info("--------------------");
        result = dataQueryProxy.query("key1");
        log.info("result={}", result);
        log.info("--------------------");
        result = dataQueryProxy.query("key1");
        log.info("result={}", result);
    }
}
